package middleware

import (
	"n-server/pkg/common/errorcode"
	"n-server/pkg/common/response"

	"github.com/gin-gonic/gin"
)

// Authorize 角色搜授权中间件（检查用户是否有指定角色）
// @params: 需要的角色列表（如 []string{"admin"} 表示仅管理员可访问）
func Authorize(requireds ...string) gin.HandlerFunc {
	return func(c *gin.Context) {
		// 1. 从 Context 中获取用户角色（需在 AuthMiddleware 之后执行）
		role, exists := c.Get("role")
		if !exists {
			response.ErrorMsg(c, errorcode.NOT_FOUND_ERROR, "未获取到用户角色信息")
			c.Abort()
			return
		}

		// 2. 验证角色格式
		roleStr, ok := role.(string)
		if !ok {
			response.ErrorMsg(c, errorcode.PARAMS_ERROR, "角色格式错误")
			c.Abort()
			return
		}

		// 3. 检查用户角色是否在允许的列表中
		hasPermission := false
		for _, r := range requireds{
			if roleStr == r {
				hasPermission = true
				break
			}
		}

		if !hasPermission {
			response.Error(c, errorcode.NOT_AUTH_ERROR)
			c.Abort()
			return
		}

		c.Next() // 权限通过，继续处理
	}
} 